<?php
require_once 'Zend/Controller/Action.php';
require_once 'Reactivos/ReactivoOpcionMultiple.class.php';
require_once 'Reactivos/ReactivoCaneva.class.php';
require_once 'Reactivos/ReactivoVF.class.php';
require_once 'Reactivos/ReactivoProvider.class.php';

class GestionReactivos_AltaReactivoController extends Zend_Controller_Action {
	public function init() {
		$registry = Zend_Registry :: getInstance();
		$this->smarty = $registry->smarty;
		$this->smarty->assign('baseUrl', $this->getRequest()->getBaseUrl());
		$this->smarty->assign('moduleName', $this->getRequest()->getModuleName());
		$this->smarty->assign('controllerName', $this->getRequest()->getControllerName());
		$this->smarty->assign('actionName', $this->getRequest()->getActionName());
		$this->smarty->assign('subtitulo', 'Alta de Reactivo');
	}

	public function indexAction() {
		$registry = Zend_Registry :: getInstance();
		$config = $registry->config;
		$niveles = explode(',', $config->appSettings->niveles->lista);
		$optionsNiveles = array ();
		foreach ($niveles as $nivel) {
			$optionsNiveles[$config->appSettings->niveles-> $nivel->indice] = $config->appSettings->niveles-> $nivel->nombre;
		}
		$habilidades = explode(',', $config->appSettings->habilidades->lista);
		$optionsHabilidades = array ();
		foreach ($habilidades as $habilidad) {
			$optionsHabilidades[$config->appSettings->habilidades-> $habilidad->indice] = $config->appSettings->habilidades-> $habilidad->nombre;
		}
		$tiposReactivos = explode(',', $config->appSettings->tiposReactivo->lista);
		$optionstiposReactivos= array ();
		foreach ($tiposReactivos as $tipoReactivo) {
			$optionstiposReactivos[$config->appSettings->tiposReactivo-> $tipoReactivo->indice] = $config->appSettings->tiposReactivo-> $tipoReactivo->nombre;
		}
		$this->smarty->assign('niveles', $optionsNiveles);
		$this->smarty->assign('habilidades', $optionsHabilidades);
		$this->smarty->assign('tiposReactivo',$optionstiposReactivos);
		$this->smarty->displayInMasterPage('gestionreactivos_altareactivo_index.tpl', 'MasterPage.tpl');
	}

	public function procesaAction() {
		$request = $this->getRequest();
		$registry = Zend_Registry :: getInstance();
		try {
			if ($request->getParam('pregunta') == "" && $request->getParam('selectTipoReactivo')!="3") {
				throw new Exception("La pregunta no debe estar vacia.");
			}
			switch ($request->getParam('selectTipoReactivo')) {
				case '1' :
					$reactivoFinal = new ReactivoOpcionMultiple();
					$contador = 0;
					$bandera = 0;
					$arrayRespuestas = $request->getParam('respuesta');
					foreach ($arrayRespuestas as $respuesta) {
						if ($respuesta != "") {
							$bandera++;
						}
					}

					if ($bandera < 3) {
						throw new Exception("Debe haber al menos 3 posibilidades de respuesta.");
					}

					if (count($request->getParam('correcta')) < 2) {
						throw new Exception("Debe marcar por lo menos 2 respuestas como correctas.");
					}

					foreach ($arrayRespuestas as $respuesta) {
						if (strlen($respuesta) != "") {
							$respuestaReactivo = null;
							foreach ($request->getParam('correcta') as $correcta) {
								if ($correcta == $contador) {
									$respuestaReactivo = new RespuestaReactivoOpcionMultiple($respuesta, true);
									break;
								}
							}
							if (!isset ($respuestaReactivo)) {
								$respuestaReactivo = new RespuestaReactivoOpcionMultiple($respuesta, false);
							}
							$reactivoFinal->addRespuesta($respuestaReactivo);
						}
						$contador++;
					}

					$reactivoFinal->setPregunta($request->getParam('pregunta'));
					$reactivoFinal->setNivel($request->getParam('nivel'));
					$reactivoFinal->setHabilidad($request->getParam('habilidad'));
					$reactivoFinal->setTipo('1');
					break;
				case '2' :

					$reactivoFinal = new ReactivoOpcionMultiple();
					$contador = 0;
					$arrayRespuestas = $request->getParam('respuesta');
					$correcta = $request->getParam('correcta');
					$bandera = 0;
					foreach ($arrayRespuestas as $respuesta) {
						if ($respuesta != "") {
							$bandera++;
						}
					}

					if ($bandera < 3) {
						throw new Exception("Debe haber al menos 3 posibilidades de respuesta.");
					}

					if ((!isset ($correcta)) || $arrayRespuestas[$correcta] == "") {
						throw new Exception("Debe seleccionar 1 respuesta como correcta dentro de las posibles respuestas.");
					}

					foreach ($arrayRespuestas as $respuesta) {
						if (strlen($respuesta) != "") {
							$respuestaReactivo = null;
							if ($request->getParam('correcta') == $contador) {
								$respuestaReactivo = new RespuestaReactivoOpcionMultiple($respuesta, true);

							} else {
								$respuestaReactivo = new RespuestaReactivoOpcionMultiple($respuesta, false);
							}

							$reactivoFinal->addRespuesta($respuestaReactivo);
						}
						$contador++;
					}
					$reactivoFinal->setPregunta($request->getParam('pregunta'));
					$reactivoFinal->setNivel($request->getParam('nivel'));
					$reactivoFinal->setHabilidad($request->getParam('habilidad'));
					$reactivoFinal->setTipo('2');
					break;
				case '3' :
					$reactivoFinal = new ReactivoCaneva();
					$radio = $request->getParam('radio');
					$contador = 0;
					if (!isset ($radio)) {
						throw new Exception("Debe seleccionar donde quedara la respuesta correcta.");
					}
					if($request->getParam('respuesta')==""){
						throw new Exception("Debe introducir cual sera la respuesta.");
					}

					$pregunta="";
					switch($radio){
						case '1':
							if($request->getParam('pregunta2')!=""){
								$contador++;
							}
							if($request->getParam('pregunta3')!=""){
								$contador++;
							}
							if($contador<1){
								throw new Exception("Debe llenar al menos dos cuadros para poder formular correctamente la pregunta.");
							}
							$pregunta=$pregunta."@";
							$pregunta=$pregunta.$request->getParam('pregunta2')." ";
							$pregunta=$pregunta.$request->getParam('pregunta3');
							break;
						case '2':
							if($request->getParam('pregunta1')!=""){
								$contador++;
							}
							if($request->getParam('pregunta3')!=""){
								$contador++;
							}
							if($contador<1){
								throw new Exception("Debe llenar al menos dos cuadros para poder formular correctamente la pregunta.");
							}
							$pregunta=$pregunta.$request->getParam('pregunta1');
							$pregunta=$pregunta."@";
							$pregunta=$pregunta.$request->getParam('pregunta3');
							break;
						case '3':
							if($request->getParam('pregunta1')!=""){
								$contador++;
							}
							if($request->getParam('pregunta2')!=""){
								$contador++;
							}
							if($contador<1){
								throw new Exception("Debe llenar al menos dos cuadros para poder formular correctamente la pregunta.");
							}
							$pregunta=$pregunta.$request->getParam('pregunta1')." ";
							$pregunta=$pregunta.$request->getParam('pregunta2');
							$pregunta=$pregunta."@";
							break;
					}
					$reactivoFinal->setPregunta($pregunta);
					$reactivoFinal->setNivel($request->getParam('nivel'));
					$reactivoFinal->setHabilidad($request->getParam('habilidad'));
					$reactivoFinal->setTipo('3');
					$reactivoFinal->setRespuesta($request->getParam('respuesta'));
					break;
				case '4' :
					$reactivoFinal= new ReactivoVF();
					$reactivoFinal->setPregunta($request->getParam('pregunta'));
					$reactivoFinal->setNivel($request->getParam('nivel'));
					$reactivoFinal->setHabilidad($request->getParam('habilidad'));
					$reactivoFinal->setTipo('4');
					if($request->getParam('respuesta')=='true')
						$reactivoFinal->setRespuesta(true);
					else
						$reactivoFinal->setRespuesta(false);
					break;
			}
			/*if($request->getParam('habilidad')!='1'){
				if($archivo_size[0]){
					$upload = fopen($archivo[0], "r" );
					$contents = fread( $upload,$archivo_size[0]);
					fclose( $upload );
					$savefile = fopen("/Archivos/".$archivo_name[0], "wb" );
					fwrite( $savefile, $contents,$archivo_size[0] );
					fclose( $savefile );
					echo "/Archivos/".$archivo_name[0];
				}
			}*/
			ReactivoProvider::saveReactivo($reactivoFinal);
			//ReactivoProvider::getReactivoAleatorio('2','1','1');
			echo "success";
		} catch (Exception $e) {
			echo "Error! : " . $e->getMessage();
		}

	}

	public function A1Action() {
		$this->smarty->display('gestionreactivos_altareactivo_opcionmultiple.tpl');
	}
	public function A2Action() {
		$this->smarty->display('gestionreactivos_altareactivo_opcionunica.tpl');
	}
	public function A3Action() {
		$this->smarty->display('gestionreactivos_altareactivo_caneva.tpl');
	}
	public function A4Action() {
		$this->smarty->display('gestionreactivos_altareactivo_vf.tpl');
	}
}
?>